/*
 * ================================================================================变量定义区
 */ 

var menutreeNode; 				 // menu tree节点
var operateType = 0; 		 // 区分新增还是更新[0：新增，1：更新]
var validateRules = "";      //校验规则
/*
 * ================================================================================页面初始化函数
 */
$(function()
{ 
	//角色选择 单击添加选中角色项
	$('#add').click(function() 
	{
		var $options = $('#select1 option:selected'); //获取选中的选项
		$options.appendTo('#select2'); //追加给对方（append方法可以实现删除追加两个步骤
	});
	
	//角色选择 单击添加所有角色项
	$('#add_all').click(function() 
	{
		var $options = $('#select1 option');
		$options.appendTo('#select2');
	});
	
	//角色选择 双击添加选中角色项
	$('#select1').dblclick(function() 
	{
		var $options = $("option:selected", this);
		$options.appendTo('#select2');
	});
	
	//角色选择 单击删除选中角色项
	$('#remove').click(function() 
	{
		var $options = $('#select2 option:selected'); //获取选中的选项
		$options.appendTo('#select1'); //追加给对方（append方法可以实现删除追加两个步骤
	});
	
	//角色选择 单击删除所有角色项
	$('#remove_all').click(function() 
	{
		var $options = $('#select2 option');
		$options.appendTo('#select1');
	});
	
	//角色选择 双击删除选中角色项
	$('#select2').dblclick(function() 
	{
		var $options = $("option:selected", this);
		$options.appendTo('#select1');
	});
	
	// 加载menu树
	menuTree();
	menuTree1();
	  
	// tree新建按钮
	$("#showAddDiv").click(function()
	{
		addMenu();
	}
	);

	// tree修改按钮
	$("#showUpdateDiv").click(function()
	{
		updateMenu();
		
		/**  将节点数据传到右侧 */ 
		getDisplayData();
		
		getleftRoles();
		 
	    displayRightRoles();
	});
	
	// tree删除按钮
	$("#deleteMenu").click(function()
	{
		deleteMenu();
	});
	 
	// 提交按钮
	$("#btnSubmit").click(function()
	{
		setRules();
		submitData();
	}
	);

	// 取消按钮
	$("#btnCancel").click(function()
	{
		location.reload();
	}
	);
	
	

});


/*
 * ================================================================================函数定义区
 * 
 */

/**
 * 有效性检查
 */

function setRules()
{
	// 设置表单中的规则
	 validateRules = 
	{
				
			// 自定义校验规则
			rules:
			{
				menuname:
				{
					required			: true,
					maxlength			: 64
				},
				
				menudesc:
				{
					maxlength			: 128
				},
				
				menutype:
				{
					required			: true,
					min                 :1,
					menutype            :true
				},
				
				menuorder:
				{
					required			: true,
					digits				: true,  
					maxlength			: 64
				},
				
				opentype:
				{
					required			: true,
					min                 :1
				},
				select2:
				{
					menurole			: true
				}
			},
			
			// 自定义校验提示信息
			messages:
			{
				menuname:
				{
					required	:"请输入menu_name",
					maxlength	:"menu_name过长，请重新输入"
				},
				
				menuorder:
				{
					required	:"请输入menu_order",
					maxlength	:"menu_order过长，请重新输入"
				},
				menudesc:
				{
				
					maxlength	:"menu_desc过长，请重新输入"
				},
				select2:
				{
					menurole	:"请至少选择一个角色"
				},
				opentype:
			    {
					min         :"请选择菜单打开方式"
			    },
			    menutype:
			    {
					min         :"请选择菜单状态",
					menutype    :"当menu_content为空时，menu_type只能选择Label"
			    }
			}
	};	
	
	//验证menuorder是否选中
	$.validator.addMethod("menutype", function(value, element) 
	{   
	    var menucont = $("#menucont").val();
	    var menutype  = $("#menutype").val();
	    var result = true;
	    
	    if (menucont=='' && menutype!=3)
	    {
	    	result = false;
	    }
	    
	    return result;
	}
	, "当menu_content为空时，menu_type只能选择Label");
	
	//验证是否选择角色
	$.validator.addMethod("menurole", function(value, element) 
	{   
	    var menurole = document.getElementById("select2").options;
	    var result = false;
	    
	    if (menurole.length > 0)
	    {
	    	result = true;
	    }
	    
	    return result;
	}
	, "请至少选择一个角色");
	
}
function submitData()
{
	setRules();
	
	var validateResult = $("#menuForm").validate(validateRules).form();
	if(!validateResult)
	{
		openAlert("请按提示填写完整信息");
		return;
	}
	else
	{
		if( operateType == 0)// 新建 
		{	 
			// 验证通过向数据库插入
			insertMenuCommit(); 
		} 
		else if( operateType == 1)// 修改
		{	 
			// 验证通过向数据库插入
			updateMenuCommit();
		}
	}
}

/**
 * 加载左侧tree和选项框里的tree
 * 其中：
 * menuTree1是选项框里的tree
 * menuTree是左侧tree
 */
function menuTree1()
{
	var setting = 
	{
			data: 
			{
				key: 
				{
					title:"titleTip"
				},
				simpleData: 
				{
					enable: true
				}
			},
			callback: 
			{
				beforeClick:beforeClick,
				onClick: onClick
			}
		};

	var zNodes = '[';
	$.ajax(
	{
		type: 'POST',
        url: BASE_PATH +'/menuManagement/loadMenuTree.do',
        dataType:"json",
        data:
        {
        },
        success:function(data,textStatus)
        { 
        	for( var i = 0; i < data.length; i++ )
        	{
        		zNodes += '{id:"' + data[i].id + '",';
        		zNodes += 'pId:"' + data[i].parentId + '",';
        		zNodes += 'name:"' + data[i].menuName  + '",';
        		zNodes += 'titleTip:"' + data[i].menuName  + '",'; 
        		zNodes += 'isLeaf:"' + data[i].isLeaf + '",';
        		zNodes += 'open:true}';
        		
        		if( i != (data.length - 1) )
        		{
        			zNodes += ',';
        		}
        	}
        	zNodes += ']';
    		// 加载树
    		$.fn.zTree.init($("#menuTree1"), setting, eval(zNodes));
    		//选中已有部门
    		var chooseId=$("#pid1").val();
    		menuIsChoosed(chooseId);
        },
		error:function(e)
		{ 
			openAlert("加载数据错误！"); 
			return;
		}
	}
	);
}

/**
 * 让已被选的菜单在树中处于被选中状态
 * @param id 所选部门的id 
 */
function menuIsChoosed(id)
{
	var zTree = $.fn.zTree.getZTreeObj("menuTree1");
	var node = zTree.getNodeByParam("id",id,null);
	zTree.selectNode(node);
}


function menuTree()
{
	var setting = 
	{
			data: 
			{
				key: 
				{
					title:"titleTip"
				},
				simpleData: 
				{
					enable: true
				}
			},
			callback: 
			{
				onClick: showMenuInfo
			}
		};

	var zNodes = '[';
	$.ajax(
	{
		type: 'POST',
        url: BASE_PATH +'/menuManagement/loadMenuTree.do',
        dataType:"json",
        data:
        {
        },
        success:function(data,textStatus)
        { 
        	for( var i = 0; i < data.length; i++ )
        	{
        		zNodes += '{id:"' + convertSpecialChar(data[i].id) + '",';
        		zNodes += 'pId:"' + convertSpecialChar(data[i].parentId) + '",';
        		zNodes += 'name:"' + convertSpecialChar(data[i].menuName)  + '",';
        		zNodes += 'titleTip:"' + data[i].menuName  + '",'; 
        		zNodes += 'isLeaf:"' + data[i].isLeaf + '",';
        		zNodes += 'open:true}';
        		
        		if( i != (data.length - 1) )
        		{
        			zNodes += ',';
        		}
        	}
        	zNodes += ']';
    		// 加载树
    		$.fn.zTree.init($("#menuTree"), setting, eval(zNodes));

    		$("#menuTree_1_a").trigger("click");
        },
		error:function(e)
		{ 
			openAlert("加载数据错误！"); 
			return;
		}
	}
	);
}


/**
 * 点击树节点展示树下所有用户信息
 * 
 * @param event
 * @param treeId
 * @param treeNode	
 * @param clickFlag
 */
function showMenuInfo(event, treeId, tempTreeNode, clickFlag) 
{  
    //切换显示模式
	$("#displaymode").show();   
    $("#editmode").hide();
	
	// 全局变量赋予树节点ID
    menutreeNode = tempTreeNode; 
	 
	//初始化显示数据
	getDisplayData();
	 
}			

/**
 * menutree1树点击前事件
 * @param treeId 树id
 * @param treeNode 树节点对象
 * @returns check 返回被选节点是否可选
 */
function beforeClick(treeId, treeNode) 
{
	var check = true;
	if(operateType == 1) 
	{
	 check = (menutreeNode.id != treeNode.id);
	 
	 if(!check) openAlert("不能选择自己为父项菜单!");
	}
	return check;
	
}

/**
 * menutree1 树单击事件
 * @param e js的event对象
 * @param treeId 树id
 * @param treeNode 树节点对象
 */

function onClick(event, treeId, tempTreeNode, clickFlag) {
	var zTree = $.fn.zTree.getZTreeObj("menuTree1"), nodes = zTree.getSelectedNodes(), v = "", id = "";
	nodes.sort(function compare(a, b) {
		return a.id - b.id;
	});

	for (var i = 0, l = nodes.length; i < l; i++) {
		v += nodes[i].name + ",";
		id += nodes[i].id + ",";
	}

	if (v.length > 0)
		v = v.substring(0, v.length - 1);

	if (id.length > 0)
		id = id.substring(0, id.length - 1);

	var parentName = $("#parentName");
	parentName.attr("value", v);

	var cityObj = $("#parentId");
	cityObj.attr("value", id);

	hideMenu();

}


/**
 * 获取右侧数据
 */
function getDisplayData()
{
	$.ajax(
	{
		type: 'POST',
		async: false,
        url: BASE_PATH +'/menuManagement/menuDetails.do',
        dataType:"json",
        data:
        { 
        	"menuId"		                    :menutreeNode.id
        },
        cache:false,
        success:function(data,textStatus)
        {   
        	$("#select1").empty();
        	$("#select").empty();
        	$("#menutype").empty();
        	$("#opentype").empty();
        	 
        	/**  右侧数据 */
        	 var menuname = data[0].menuName;
        	 $("#menuname").val( menuname );
        	 $("#menuname1").val( menuname );
        	 
        	 var menudesc = data[0].menu_desc;
        	 $("#menudesc").val( menudesc );
        	 $("#menudesc1").val( menudesc );
        	 
        	 var menucontent = data[0].menuVal;
        	 $("#menucont").val( menucontent );
        	 $("#menucont1").val( menucontent );
        	 
        	 var menuorder = data[0].menuOrder;
        	 $("#menuorder").val( menuorder );
        	 $("#menuorder1").val( menuorder );
        	 
        	 $("#opentype").append("<option  selected>-------请选择菜单打开状态-------</option>");
        	 $("#opentype").append("<option value='1' >当前页面</option>");
        	 $("#opentype").append("<option value='2' >新页面</option>");
        	 
        	 var opentype = data[0].menu_opentype;
        	 $("#opentype").val( opentype ); 
        	 if(opentype == '1'){
        		 $("#opentype1").val( "当前页面" ); 
        	 }else if(opentype == '2'){
        		 $("#opentype1").val( "新页面" ); 
        	 }
        	
        	 $("#menutype").append("<option  selected>--------请选择菜单状态--------</option>");
        	 $("#menutype").append("<option value='1' >URL</option>");
    		 $("#menutype").append("<option value='2'>JavaScript</option>");
    		 $("#menutype").append("<option value='3'>Label</option> ");
        	 
        	 var menutype = data[0].type; 
        	 $("#menutype").val( menutype ); 
        	 if(menutype=='1'){
        		 $("#menutype1").val( "URL" );
        	 }else if(menutype=='2'){
        		 $("#menutype1").val( "JavaScript" );
        	 }else if(menutype=='3'){
        		 $("#menutype1").val( "Label" );
        	 }
        	 
        	
        	 var parentId = data[0].parentId;
        	 
        	 $("#parentId").val(parentId);
        	 
        	 var parentName = data[0].parentName;
        	 $("#parentName").val(parentName);
        	 $("#parentName1").val( parentName );
        	 
         	for( var i = 0; i < data.length; i++ )
         	{ 
         		 var option = data[i].role;
         		 if(option!=null){
         			$("#select").append("<option  style='font-size: 14px;' value='"+option+"'>"+option+"</option>");
         		 }
         		
         	}
        },
		error:function(e)
		{
			openAlert("加载数据错误！"); 
			return;
		}
	}
	);
} 
 

/**
 * 判断是否隐藏树
 * @param event 事件源
 */
function onBodyDown(event)
{
	
	if (!(event.target.id == "menuBtn" || event.target.id == "menuContent" 
		|| $(event.target).parents("#menuContent").length>0)) 
	{
		hideMenu();
	}
	
}


/**
 * 显示树
 */
function showMenu() 
{ 
	$("#menuContent").slideDown("fast");
	$("body").bind("mousedown", onBodyDown);
	
}


/**
 * 隐藏树
 */
function hideMenu() 
{
	
	$("#menuContent").fadeOut("fast");
	$("body").unbind("mousedown", onBodyDown);
	
} 

/**
 * 新建按钮
 */
function addMenu()
{

	operateType = 0; //新建标记
 
     $("#displaymode").hide();   
     $("#editmode").show(); 
      
 	/**  清空右侧数据 */ 
 	 $("#menuname").val("");  
 	 $("#menudesc").val("");  
 	 $("#menucont").val(""); 
 	 $("#menuorder").val(""); 
 	 $("#opentype").val("");  
 	 $("#menutype").val(""); 
 	 $("#select2").empty();
 	 $("#select1").empty();
 	 $("#select").empty();
 	 $("#parentId").val(menutreeNode.id);  
 	 
 	 //将所有角色赋予select1框
 	 getleftRoles();
}

/**
 * 在后台得到所有role 只展示此菜单未选中的角色
 * 
 */
function getleftRoles()
{
	if(operateType == 1){
		

	$.ajax(
			{
				type: 'POST',
		        url: BASE_PATH +'/menuManagement/getLeftRoles.do',
		        dataType:"json",
		        data:
		        {
		        	"menuId"		                    :menutreeNode.id
		        },
		        
		        success:function(data)
		        {
		        		for (var k = 0; k < data.length; k++) {
		        			 var option = data[k].role;
		        			 $("#select1").append("<option style='font-size: 14px;' value='"+option+"'>"+option+"</option>");
		        		}
		        },
		        
				error:function(e)
				{
					openAlert("加载数据错误！"); 
					return;
				}
			});	
	}
	
	if(operateType == 0 )
	{

		$.ajax(
				{
					type: 'POST',
			        url: BASE_PATH +'/menuManagement/getAllRoles.do',
			        dataType:"json",
			        data:
			        {
			        },
			        
			        success:function(data)
			        {
		        		for (var k = 0; k < data.length; k++) {
		        			var option = data[k].role_name;
		        			 $("#select1").append("<option style='font-size: 14px;' value='"+option+"'>"+option+"</option>");
		        		}
			        },
			        
					error:function(e)
					{
						openAlert("加载数据错误！"); 
						return;
					}
				});	
	}		       
}

/**
 * 修改按钮
 */
function updateMenu()
{  
	
	operateType = 1; //修改标记
	
     $("#displaymode").hide();   
     $("#editmode").show();
     $("#select1").empty();
     $("#select2").empty();
 	
}


function displayRightRoles(){
	
	var selectObj = document.getElementById("select").options;
	 
    for (var i = 0; i < selectObj.length; i++) {
	var option = selectObj[i].text;

		if (option != null) {
			$("#select2").append("<option style='font-size: 14px;' value='" + option + "'>"+ option + "</option>");
		}
    }
    
}

/**
 * 修改（更新）菜单
 */
function updateMenuCommit() 
{
	
	if ( menutreeNode.id ) 
	{  
		var menuId = menutreeNode.id;     
		var menuName = $.trim($("#menuname").val());
		var menuDesc = $.trim($("#menudesc").val());
		var menuCont = $.trim($("#menucont").val());
		var menuOrder = $.trim($("#menuorder").val());
		var menuOpenType = $.trim($("#opentype").val());
		var menuType = $.trim($("#menutype").val());
		var pId = $.trim($("#parentId").val());
		
		$.ajax(
		{
			type: 'POST',
			url : BASE_PATH + "/menuManagement/updateMenu.do",
	        dataType:"json",
	        async: false,
	        data:
	        {
	        	"id"				:   menuId,
	        	"menuName"			:	menuName,
	        	"menu_desc"			:	menuDesc,
	        	"menuVal"			:	menuCont,
	        	"menuOrder"			:	menuOrder,
	        	"menu_opentype"   	:	menuOpenType,
	        	"type"				:	menuType,
	        	"parentId"		 	:	pId,
	        	"role"				:	getSelectedRoles(),
	        	"create_user"		:	$("#singleIdHidden").attr("value"),
	        	"last_modify_user"  :   $("#singleIdHidden").attr("value")
	        },
			success : function( data ) 
			{
				if( data == 'success' )
				{
					openAlert('更新成功',function()
					{
						location.reload();
					}
					);
				}
				else
				{
					openAlert('更新失败');
				}
			}
		}
		);
	} 
	else 
	{
		openAlert("请选择菜单！");
	}
}

/**
 * 新建菜单
 */
function insertMenuCommit() 
{
	var menuName = $.trim($("#menuname").val());
	var menuDesc = $.trim($("#menudesc").val());
	var menuCont = $.trim($("#menucont").val());
	var menuOrder = $.trim($("#menuorder").val());
	var menuOpenType = $.trim($("#opentype").val());
	var menuType = $.trim($("#menutype").val());
	var pId = $.trim($("#parentId").val());
	 
	$.ajax(
		{
		type: 'POST',
		url : BASE_PATH + "/menuManagement/insertMenu.do",
        dataType:"json",
        async: false,
        data:
        { 
        	"menuName"			:	menuName,
        	"menu_desc"			:	menuDesc,
        	"menuVal"			:	menuCont,
        	"menuOrder"			:	menuOrder,
        	"menu_opentype"   	:	menuOpenType,
        	"type"				:	menuType,
        	"parentId"		 	:	pId,
        	"role"				:	getSelectedRoles(),
        	"create_user"		:	$("#singleIdHidden").attr("value"),
        	"last_modify_user"  :   $("#singleIdHidden").attr("value")
        },
		success : function( data ) 
		{
			if( data == 'success' )
			{
				openAlert('新建成功',function()
				{
					location.reload();
				}
				);
			} 
			else
			{
				openAlert('新建失败');
			}
		}
	}
	);
}

/**
 * 获取所有选中角色并拼接成字符串
 * @returns roles 返回角色字符串
 */
function getSelectedRoles()
{
	var $id = $("#select2 option");
	var roles = "";

	// 若角色数不为0，拼接角色
	for (var i = 0; i < $id.size(); i++) {
		var $option = $id.eq(i);

		if (i == ($id.size() - 1)) {
			roles += $option.text();
			break;
		}
		roles += $option.text() + ",";
	}
	return roles;
	
}

/**
 * 删除菜单
 */
function deleteMenu() 
{
	 
	
	var temArr = new Array();
	temArr.push(1);
	openConfirm("确认删除选中的菜单吗？", this, function()
	{
		if ( menutreeNode.id ) 
		{
			$.ajax(
			{
				type: 'POST',
				url : BASE_PATH + "/menuManagement/deleteMenu.do",
				dataType:"json",
		        data:
		        {
		        	"menuId" :	menutreeNode.id
		        },
				success : function( data ) 
				{
					if( data == 'success' )
					{
						openAlert('删除成功',function()
						{
							location.reload();
						}
						);
					} 
					else
					{
						openAlert('删除失败');
					}
				}
			}
			);
		} 
		else 
		{
			openAlert("请选择菜单！");
		}
	}
	, temArr);
} 

